package com.example.demo.controller;

import cn.dev33.satoken.annotation.*;
import cn.dev33.satoken.util.SaResult;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
@RequestMapping("/user/")
public class MyUserController {

    // 登录校验：只有登录之后才能进入该方法
    @SaCheckLogin
    @GetMapping("info")
    public String info() {
        return "查询用户信息";
    }

    // 角色校验：必须具有指定角色才能进入该方法
    @SaCheckRole("super-admin")
    @PostMapping("addCheckRole")
    public String addCheckRole() {
        return "addCheckRole:用户增加";
    }

    // 权限校验：必须具有指定权限才能进入该方法
    @SaCheckPermission("user-add")
    @PostMapping("addCheckPermission")
    public String addCheckPermission() {
        return "addCheckPermission:用户增加";
    }

    // 二级认证校验：必须二级认证之后才能进入该方法
    @SaCheckSafe()
    @PostMapping("addCheckSafe")
    public String addCheckSafe() {
        return "addCheckSafe:用户增加";
    }

    // Http Basic 校验：只有通过 Basic 认证后才能进入该方法
    @SaCheckBasic(account = "sa:123456")
    @PostMapping("addCheckBasic")
    public String addCheckBasic() {
        return "addCheckBasic: 用户增加";
    }

    // 校验当前账号是否被封禁 comment 服务，如果已被封禁会抛出异常，无法进入方法
    @SaCheckDisable("comment")
    @PostMapping("send")
    public String sendCheckDisable() {
        return "sendCheckDisable:查询用户信息";
    }

    // 注解式鉴权：只要具有其中一个权限即可通过校验
    @PostMapping("atJurOr")
    @SaCheckPermission(value = {"user-add", "user-all", "user-delete"}, mode = SaMode.OR)
    public SaResult atJurOr() {
        return SaResult.data("用户信息");
    }

    // 角色权限双重 “or校验”：具备指定权限或者指定角色即可通过校验
    @PostMapping("userAdd")
    @SaCheckPermission(value = "user.add", orRole = "admin")
    public SaResult userAdd() {
        return SaResult.data("用户信息");
    }

    // 此接口加上了 @SaIgnore 可以游客访问
    @SaIgnore
    @PostMapping("getList")
    public SaResult getList() {
        return SaResult.ok("获取列表");
    }

    @PostMapping("getUserList")
    public SaResult getUserList() {
        return SaResult.ok("获取用户列表");
    }

}